﻿using System;
using System.Text;
using System.Drawing;
using System.Buffers;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.InteropServices;

public static partial class glDRIVE
{
    /*
    函数 gl.max1
    一维极值连分式法
    f计算目标函数f(x)值的函数名。
    df计算目标函数一阶导数值的函数名。
    int max1(double *x, double eps, double (*f)(double), double (*df)(double))
    参数 x: 存放极值点初值。返回极值点。
    参数 eps: 控制精度要求。
    参数 interation: 
    返回值 函数返回标志值。若>0为极大值点；若<0为极小值点;若=0则不是极值点。
    */

    public static string drive_max1()
    {
        int k;
        double eps, x;

        eps = 1.0e-10;
        x = 1.0;

        gl.f_x = max1f;
        gl.df_x = max1df;
        double[] xa = new double[1] { x };
        k = gl.max1(xa, eps);

        return gl.html_table("点 x,k,f(x)", new double[] { x, k, max1f(x) });

        /*
        cout <<"点 x = " <<x;
        if (k < 0) cout <<"  为极小值点" <<endl;
        else if (k > 0) cout <<"  为极大值点" <<endl;
        else cout <<"  不是极值点" <<endl;
         cout <<"极值  f(x) = " <<max1f(x) <<endl;
        return "error: 0";
        */
    }

    // 计算目标函数值
    private static double max1f(double x)
    {
        double y;
        y = (x - 1.0) * (10.0 - x);
        return (y);
    }

    // 计算目标函数导数值
    private static double max1df(double x)
    {
        double y;
        y = -2.0 * x + 11.0;
        return (y);
    }
}